package br.edu.fafica.medico.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import br.edu.fafica.model.Medico;

public class JdbcMedicoDAO implements MedicoDAO {
	private Connection conexao;
	
	public JdbcMedicoDAO() {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			conexao = DriverManager.getConnection("jdbc:mysql://localhost/db_projeto_mvc", "root", "");
			//conexao = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_projeto_mvc", "root", "");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	

	@Override
	public void inserir(Medico medico) {
		String sql = "insert into tb_medico (nome, sexo, crm, especialidade, horario, endereco, telefone, email, cidade, estado) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
		PreparedStatement st;
		try {
			st = conexao.prepareStatement(sql);
			st.setString(1, medico.getNome());
			st.setString(2, medico.getSexo());
			st.setString(3, medico.getCrm());
			st.setString(4, medico.getEspecialidade());
			st.setString(5, medico.getHorario());
			st.setString(6, medico.getEndereco());
			st.setString(7, medico.getTelefone());
			st.setString(8, medico.getEmail());
			st.setString(9, medico.getCidade());
			st.setString(10, medico.getEstado());
			st.executeUpdate();
			st.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	@Override
	public void atualizar(Medico medico) {
		try {
			PreparedStatement st = conexao.
					prepareStatement("UPDATE tb_medico SET nome = ?, sexo=?, crm=?, especialidade = ?, horario = ?, telefone = ?, email = ?, endereco = ?, cidade = ?, estado = ? WHERE id = ?");
			st.setString(1, medico.getNome());
			st.setString(2, medico.getSexo());
			st.setString(3, medico.getCrm());
			st.setString(4, medico.getEspecialidade());
			st.setString(5, medico.getHorario());
			st.setString(6, medico.getTelefone());
			st.setString(7, medico.getEmail());
			st.setString(8, medico.getEndereco());
			st.setString(9, medico.getCidade());
			st.setString(10, medico.getEstado());
			st.setInt(11, medico.getId());
			
			st.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

	@Override
	public void deletar(int id) {
		try {
			PreparedStatement ps = conexao.prepareStatement("DELETE FROM tb_medico WHERE id = ?");
			ps.setInt(1, id);
			
			ps.executeUpdate();

		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	
	
	
	@Override
	public List<Medico> listarMedicos() {
		List<Medico> medicos = new ArrayList<Medico>();

		try {
			Statement stmt = conexao.createStatement();
			ResultSet rs = stmt.executeQuery("SELECT * FROM tb_medico");
			
			while (rs.next()) {
				int Id = rs.getInt("id");
				String Nome = rs.getString("nome");
				String Sexo = rs.getString("sexo");
				String Crm = rs.getString("crm");
				String Horario = rs.getString("horario");
				String Endereco = rs.getString("endereco");
				String Telefone = rs.getString("telefone");
				String Email = rs.getString("email");
				String Cidade = rs.getString("cidade");
				String Estado = rs.getString("estado");
				String Especialidade = rs.getString("especialidade");
				
				Medico medico = new Medico();
				medico.setId(Id);
				medico.setNome(Nome);
				medico.setSexo(Sexo);
				medico.setCrm(Crm);
				medico.setHorario(Horario);
				medico.setEndereco(Endereco);
				medico.setTelefone(Telefone);
				medico.setEmail(Email);
				medico.setCidade(Cidade);
				medico.setEspecialidade(Especialidade);
				medico.setEstado(Estado);
				
				
				medicos.add(medico);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return medicos;
	}
	
	@Override
	public List<Medico> buscarMedicos(String campo, String valor) {
		
		List<Medico> medicos = new ArrayList<Medico>();
		
		Medico medico = null;
		try {
			PreparedStatement ps = conexao.prepareStatement("SELECT * FROM tb_medico WHERE "+ campo + " = ?");
			
			ps.setString(1, valor);
			
			ResultSet rs = ps.executeQuery();
			
			if (rs.next()) {
				int idAluno = rs.getInt("id");
				String nome = rs.getString("nome");
				String sexo = rs.getString("sexo");
				String crm = rs.getString("crm");
				String horario = rs.getString("horario");
				String endereco = rs.getString("endereco");
				String telefone = rs.getString("telefone");
				String email = rs.getString("email");
				String Cidade = rs.getString("cidade");
				String Estado = rs.getString("estado");
				String Especialidade = rs.getString("especialidade");
				
				medico = new Medico();
				medico.setId(idAluno);
				medico.setNome(nome);
				medico.setSexo(sexo);
				medico.setCrm(crm);
				medico.setHorario(horario);
				medico.setEndereco(endereco);
				medico.setTelefone(telefone);
				medico.setEmail(email);
				medico.setCidade(Cidade);
				medico.setEspecialidade(Especialidade);
				medico.setEstado(Estado);
				
				medicos.add(medico);

			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return medicos;
	}


	@Override
	public int countMedico() {
		// TODO Auto-generated method stub
		
		int resultado = 0;
		
		try {
			PreparedStatement ps = conexao.prepareStatement("SELECT COUNT(*) as COUNT FROM tb_medico;");
			ResultSet rs = ps.executeQuery();
			
			while(rs.next()){
				resultado = rs.getInt("COUNT");
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return resultado;
	}


	@Override
	public Medico buscarPorId(int id) {
		// TODO Auto-generated method stub
		Medico medico = null;
		try {
			PreparedStatement ps = conexao.prepareStatement("SELECT * FROM tb_medico WHERE id = ?");
			
			ps.setInt(1, id);
			
			ResultSet rs = ps.executeQuery();
			
			if (rs.next()) {
				int idAluno = rs.getInt("id");
				String nome = rs.getString("nome");
				String sexo = rs.getString("sexo");
				String crm = rs.getString("crm");
				String horario = rs.getString("horario");
				String endereco = rs.getString("endereco");
				String telefone = rs.getString("telefone");
				String email = rs.getString("email");
				String Cidade = rs.getString("cidade");
				String Estado = rs.getString("estado");
				String Especialidade = rs.getString("especialidade");
				
				medico = new Medico();
				medico.setId(idAluno);
				medico.setNome(nome);
				medico.setSexo(sexo);
				medico.setCrm(crm);
				medico.setHorario(horario);
				medico.setEndereco(endereco);
				medico.setTelefone(telefone);
				medico.setEmail(email);
				medico.setCidade(Cidade);
				medico.setEspecialidade(Especialidade);
				medico.setEstado(Estado);


			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return medico;
	}

}
